package de.gof.ppstool.fertigungsverwaltung.db;

import java.io.Serializable;
import javax.persistence.*;
import de.gof.ppstool.lagerverwaltung.db.Teil;

/**
 * The persistent class for the fertigungsauftragsposition database table.
 */
@Entity
@Table(name = "fertigungsauftragsposition")
@NamedQueries({
		@NamedQuery(name = Fertigungsauftragsposition.FINDE_ALLE_FERTIGUNGSAUFTRAGSPOSITIONEN, query = "SELECT DISTINCT f FROM Fertigungsauftragsposition f"),
		@NamedQuery(name = Fertigungsauftragsposition.FINDE_FERTIGUNGSAUFTRAGSPOSITIONEN_NACH_FERTIGUNGSAUFTRAG, query = "SELECT DISTINCT f FROM Fertigungsauftragsposition f WHERE f.fertigungsauftrag.fertigungsauftragId = :"
				+ Fertigungsauftragsposition.PARAM_FERTIGUNGSAUFTRAG) })
public class Fertigungsauftragsposition implements Serializable {
	private static final long serialVersionUID = 1L;
	/**
	 * +++++++++++++++++++++++++++++++++++++++
	 * ++++ Felder fuer NamedQueries +++++++++
	 * +++++++++++++++++++++++++++++++++++++++
	 */
	static final String FINDE_ALLE_FERTIGUNGSAUFTRAGSPOSITIONEN = "findealleFertigungsauftragspositionen";
	static final String FINDE_FERTIGUNGSAUFTRAGSPOSITIONEN_NACH_FERTIGUNGSAUFTRAG = "findeFertigungsauftragspositionenNachFertigungsauftrag";
	static final String PARAM_FERTIGUNGSAUFTRAG = "fertigungsauftrag_id";
	/**
	 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	 * +++++ Attribute der Klasse Fertigungsauftragsposition +++
	 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	 */
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "fertigungsauftragsposition_sequence_name")
	@SequenceGenerator(name = "fertigungsauftragsposition_sequence_name", sequenceName = "fertigungsauftragsposition_fertigungsauftragsposition_id_seq", allocationSize = 1)
	@Column(unique = true, nullable = false, name = "fertigungsauftragsposition_id")
	private Long fertigungsauftragspositonId;
	@Column(length = 2147483647)
	private String auftragskosten;
	@Column(nullable = false, length = 2147483647)
	private Integer auftragsmenge;
	@Transient
	private int[][] kaufteile;
	//bi-directional many-to-one association to Fertigungsauftrag
	@ManyToOne
	@JoinColumn(name = "fertigungsauftrag_id")
	private Fertigungsauftrag fertigungsauftrag;
	//bi-directional many-to-one association to Teil
	@ManyToOne
	@JoinColumn(name = "teil_id", nullable = false)
	private Teil teil;
	@ManyToOne
	@JoinColumn(name = "fehlendeteile_id", nullable = true)
	private Fehlendeteile fehlendeteile;
	@Column(length = 2147483647)
	private String los;
	@Column(length = 2147483647)
	private Integer verbindlicheauftraege;
	@Column(length = 2147483647)
	private Integer lagerbestandvorperiode;
	@Column(length = 2147483647)
	private Integer auftraegeinwarteschlange;
	@Column(length = 2147483647)
	private Integer auftraegeinbearbeitung;
	@Column(length = 2147483647)
	private Integer geplanterlagerbestand;

	/**
	 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	 * +++++ Konstruktoren der Klasse Fertigungsauftragsposition +++
	 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	 */
	public Fertigungsauftragsposition() {
		super();
	}

	public Fertigungsauftragsposition(Long fertigungsauftragspositonId,
			String auftragskosten, Integer auftragsmenge,
			Fertigungsauftrag fertigungsauftrag, Teil teil, String los) {
		super();
		this.fertigungsauftragspositonId = fertigungsauftragspositonId;
		this.auftragskosten = auftragskosten;
		this.auftragsmenge = auftragsmenge;
		this.fertigungsauftrag = fertigungsauftrag;
		this.teil = teil;
		this.los = los;
		this.fertigungsauftrag.getFertigungsauftragspositionen().add(this);
	}

	/**
	 * +++++++++++++++++++++++++++++	
	 * +++++ Getter und Setter +++++
	 * +++++++++++++++++++++++++++++
	 */
	public Long getFertigungsauftragspositonId() {
		return this.fertigungsauftragspositonId;
	}

	public void setFertigungsauftragspositonId(Long fertigungsauftragspositonId) {
		this.fertigungsauftragspositonId = fertigungsauftragspositonId;
	}

	public String getAuftragskosten() {
		return this.auftragskosten;
	}

	public void setAuftragskosten(String auftragskosten) {
		this.auftragskosten = auftragskosten;
	}

	public Integer getAuftragsmenge() {
		return this.auftragsmenge;
	}

	public void setAuftragsmenge(Integer auftragsmenge) {
		this.auftragsmenge = auftragsmenge;
	}

	public Fertigungsauftrag getFertigungsauftrag() {
		return this.fertigungsauftrag;
	}

	public void setFertigungsauftrag(Fertigungsauftrag fertigungsauftrag) {
		this.fertigungsauftrag = fertigungsauftrag;
	}

	public Teil getTeil() {
		return this.teil;
	}

	public void setTeil(Teil teil) {
		this.teil = teil;
	}

	public void setFehlendeteile(Fehlendeteile fehlendeteile) {
		this.fehlendeteile = fehlendeteile;
	}

	public Fehlendeteile getFehlendeteile() {
		return fehlendeteile;
	}

	public void setKaufteile(int[][] kaufteile) {
		this.kaufteile = kaufteile;
	}

	public int[][] getKaufteile() {
		return kaufteile;
	}

	public void setLos(String los) {
		this.los = los;
	}

	public String getLos() {
		return los;
	}

	public Integer getVerbindlicheauftraege() {
		return verbindlicheauftraege;
	}

	public void setVerbindlicheauftraege(Integer verbindlicheauftraege) {
		this.verbindlicheauftraege = verbindlicheauftraege;
	}

	public Integer getLagerbestandvorperiode() {
		return lagerbestandvorperiode;
	}

	public void setLagerbestandvorperiode(Integer lagerbestandvorperiode) {
		this.lagerbestandvorperiode = lagerbestandvorperiode;
	}

	public Integer getAuftraegeinwarteschlange() {
		return auftraegeinwarteschlange;
	}

	public void setAuftraegeinwarteschlange(Integer auftraegeinwarteschlange) {
		this.auftraegeinwarteschlange = auftraegeinwarteschlange;
	}

	public Integer getAuftraegeinbearbeitung() {
		return auftraegeinbearbeitung;
	}

	public void setAuftraegeinbearbeitung(Integer auftraegeinbearbeitung) {
		this.auftraegeinbearbeitung = auftraegeinbearbeitung;
	}

	public Integer getGeplanterlagerbestand() {
		return geplanterlagerbestand;
	}

	public void setGeplanterlagerbestand(Integer geplanterlagerbestand) {
		this.geplanterlagerbestand = geplanterlagerbestand;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((auftragskosten == null) ? 0 : auftragskosten.hashCode());
		result = prime * result
				+ ((auftragsmenge == null) ? 0 : auftragsmenge.hashCode());
		result = prime
				* result
				+ ((fertigungsauftragspositonId == null) ? 0
						: fertigungsauftragspositonId.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;

		if (obj == null)
			return false;

		if (getClass() != obj.getClass())
			return false;

		Fertigungsauftragsposition other = (Fertigungsauftragsposition) obj;
		if (auftragskosten == null) {
			if (other.auftragskosten != null)
				return false;

		} else if (!auftragskosten.equals(other.auftragskosten))
			return false;

		if (auftragsmenge == null) {
			if (other.auftragsmenge != null)
				return false;

		} else if (!auftragsmenge.equals(other.auftragsmenge))
			return false;

		if (fertigungsauftragspositonId == null) {
			if (other.fertigungsauftragspositonId != null)
				return false;

		} else if (!fertigungsauftragspositonId
				.equals(other.fertigungsauftragspositonId))
			return false;

		if (los == null) {
			if (other.los != null)
				return false;

		} else if (!los.equals(other.los))
			return false;

		return true;
	}

	@Override
	public String toString() {
		return "Fertigungsauftragsposition [fertigungsauftragspositonId = "
				+ fertigungsauftragspositonId + ", auftragskosten = "
				+ auftragskosten + ", auftragsmenge = " + auftragsmenge
				+ ", fertigungsauftragspositonId = "
				+ fertigungsauftragspositonId + ", los = " + los + "]";
	}

}
